import { createRoute } from "../create-matcher";

class Base {
  constructor(router) {
    this.router = router;
    // 该数据是响应式数据, record 变化就需要渲染页面
    // 在路由的入口文件 index.js 中设置,Vue.util.defineReactive(this, '_route', this._router.history.current);
    this.current = createRoute(null, { path: '/'}); // 首次访问
  }
  
  listen (cb) {
    this.cb = cb;
  }
  
  // 根据路径, 拿到对应的组件 record, 进行跳转
  transitionTo(location, callback) { // 根据路径进行跳转
    // 根据路径进行匹配 ，匹配到对应的记录
    const record = this.router.match(location); // 尽量不要操作别人家类里面的属性

    // 每次请求的路径, 该数据是响应式数据, record 变化就需要渲染页面
    this.current =  createRoute(record, {path:location});

    this.cb && this.cb(this.current);

    callback && callback(); // 这个 callback 默认只有第一次传递调用
  }
}

export default Base;